
template<class T, const int sz>
void StaticArray<T, sz>::valid() const{
    ASSERT(this != 0, "internal error");
}


template<class T, const int sz>
void StaticArray<T, sz>::init(){
    ASSERT(sz >= 0, "size is incorrect");
    valid();
}

template<class T, const int sz>
StaticArray<T, sz>::StaticArray(const T src[])
:   Array<T>(){
    this->init();
    if (src == 0){
        this->zeroize();
    }else{
        this->move(0, src, sz);
    }
}

template<class T, const int sz>
StaticArray<T, sz>::StaticArray(const Array<T>& src)
:   Array<T>(){
    ASSERT(sz == src.size(), "size is invalid");
    this->init();
    this->move(0, src, 0, sz);
}

template<class T, const int sz>
StaticArray<T, sz>::~StaticArray(){
    valid();
    this->zeroize();
}

template<class T, const int sz>
void StaticArray<T, sz>::operator=(const Array<T>& src){
    this->assign(src);
}

